package com.koron.rating.classify.mapper;

import com.koron.bean.system.org.OrgBean;
import com.koron.rating.classify.bean.ImpEqBo;
import com.koron.rating.classify.bean.RatingUnitBean;
import com.koron.rating.classify.bean.RatingUnitTypeGroupVo;
import com.koron.rating.rating.bean.RatingUnitHistoryBean;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * @Author: rocky
 * @Date: 2022/1/6 15:51
 */
public interface RatingUnitMapper {
//    int deleteByPrimaryKey(String id);

    int insert(RatingUnitBean record);

    int insertOrUpdate(RatingUnitBean record);

    int insertOrUpdateSelective(RatingUnitBean record);

    int insertSelective(RatingUnitBean record);

    RatingUnitBean selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(RatingUnitBean record);

    int updateByPrimaryKey(RatingUnitBean record);

    int updateBatch(List<RatingUnitBean> list);

    int updateBatchSelective(List<RatingUnitBean> list);

    int batchInsert(@Param("list") List<RatingUnitBean> list);

    /**
     * 根据层级获取最大层级编码
     *
     * @param level
     * @return
     */
    Integer getMaxLevelCodeByLevel(@Param("level") Integer level);

    /**
     * 根据id查询路径
     *
     * @param id
     * @return
     */
    String queryLevelPathById(@Param("id") String id);

    /**
     * 根据id改父名称
     *
     * @param id
     * @param name
     * @return
     */
    int updateParentNameById(@Param("id") String id, @Param("name") String name);

    /**
     * 跟新当前节点所有字节点及其孙子节点的full_path_name
     *
     * @param originName
     * @param currentName
     * @param parentId
     * @return
     */
    int updateFullPathName(@Param("originName") String originName, @Param("currentName") String currentName, @Param("parentId") String parentId);

    /**
     * 刪除
     **/
    int delete(@Param("id") String id);

    /**
     * 查子节点个数
     *
     * @param id
     * @return
     */
    int countChildren(@Param("id") String id);

    /**
     * 查询 分页查询
     **/
    List<RatingUnitBean> list(@Param("parentId") String parentId, @Param("name") String name);

    /**
     * 查询部门下的
     *
     * @return
     */
    List<RatingUnitBean> listBydeptId(@Param("deptId") String deptId, @Param("name") String name);

    /**
     * 单元级没没有默认到定位到单位级
     */
    RatingUnitBean getLeftUpperEquipmentByDeptId(String deptId);


    /**
     * 默认定位到单元级
     *
     * @param deptId
     * @return
     */
    RatingUnitBean getLeftUpperRatingByDeptId(String deptId);

    /**
     * 同级下 查排序号比自己小 (上移)
     *
     * @param parentId
     * @param maxSort
     * @return
     */
    List<RatingUnitBean> queryByParentIdAndSortBefore(@Param("parentId") String parentId, @Param("maxSort") Integer maxSort);

    /**
     * 同级下 查排序号比自己大 (下移)
     *
     * @param parentId
     * @param minSort
     * @return
     */
    List<RatingUnitBean> queryByParentIdAndSortAfter(@Param("parentId") String parentId, @Param("minSort") Integer minSort);

    /**
     * 根据id改 排序号
     *
     * @param updatedSort
     * @param id
     * @return
     */
    int updateSortById(@Param("updatedSort") Integer updatedSort, @Param("id") String id);

    /**
     * 获取全部单元化
     * 设备评级专用：
     * sql: 记录自身的id 会 覆盖 自身的data_sources字段
     *
     * @return
     */
    List<RatingUnitBean> queryAllByrRating();

    /**
     * 获取设备上一次评级结果和时间
     *
     * @return
     */
    List<RatingUnitHistoryBean> queryBeforGrade();

    /**
     * 各类型数量
     *
     * @return
     */
    List<RatingUnitTypeGroupVo> queryRatingUnitTypeGroup(String deptId);

    /**
     * 获取整个单元格划分
     *
     * @return
     */
    List<RatingUnitBean> queryAll();


    // 评级变更使用
    int deleteAll();

    //检查同级是否重复添加
    List<RatingUnitBean> queryByUnitTypeAndDeptIdAndDeleteFlag(@Param("unitType") String unitType, @Param("deptId") String deptId, @Param("deleteFlag") Integer deleteFlag);

    // 检查重复 2部门查重、3单位查重、(4、5、6)单元、设备、部件 查重
    List<String> queryEquipmentIdByUnitTypeIn(@Param("unitTypeCollection") Collection<String> unitTypeCollection, @Param("id") String id);

    RatingUnitBean queryByEquipmentId(@Param("equipmentId") String equipmentId);

    // 查出设备台账-所有高压线
    List<ImpEqBo> querygyx(@Param("id") String id);

    List<RatingUnitBean> queryByDataSources(@Param("dataSources") String dataSources);

    // 根据部门找出所有未关联评级标准的节点
    List<RatingUnitBean> queryByDeptIdAndRatingIdIsNull(@Param("deptId") String deptId);

    // 更新没有评级标准的设备
    int updateRatingIdByDeptId(@Param("deptId") String deptId);

    // 检查组织
    List<OrgBean> queryOrg(@Param("list") List<String> id);

    // deptId 换 树ID
    List<RatingUnitBean> queryByEquipmentIdIn(@Param("equipmentIdCollection")Collection<String> equipmentIdCollection);

    List<String> selectByDeptId(@Param("list")List<String> deptIds);

    List<String> selectByEquipmentIds(@Param("equipmentIds")List<String> equipmentIds);

    List<RatingUnitBean> queryRatingByIds(@Param("list") List<String> ids);
}
